home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Programmer Disk
/
The Programmer Disk (Microforum).iso
/
xpro
/
basic2
/
pro7
/
wdemo.bas
< prev
next >
Wrap
BASIC Source File
|
1989-01-06
|
19KB
|
605 lines
DECLARE SUB ReadScreenDemo ()
DECLARE SUB demo2 ()
DECLARE SUB demo1 ()
DECLARE SUB scrolltext ()
DECLARE SUB SubPause ()
DECLARE SUB PrintxDemo ()
DECLARE SUB StringArray ()
DECLARE SUB machine ()
DECLARE SUB NewBorders ()
DECLARE SUB SimError ()
DECLARE SUB attributes ()
DECLARE SUB Fill ()
DECLARE SUB open10 ()
DECLARE SUB train ()
DECLARE SUB inc (n)
DECLARE SUB dec (n)
'==================================================================
REM $DYNAMIC
REM $INCLUDE: 'Declare.Bas'
'==================================================================
OPTION BASE 1
REDIM e$(100): CALL StringArray: 'initialize some strings for PrintxDemo
'-----blank all four screens----
COLOR 7, 0
FOR page = 3 TO 0 STEP -1
SCREEN , , page, page: CLS
NEXT
'----Initialize the string array for the main menu----
RESTORE 100: REDIM m$(20)
FOR x = 1 TO 20: READ m$(x): NEXT
'----print the menu----
OpenW 2, 7, 0, 1, 1, 14, 80
CALL FillW(0, VARPTR(m$(1)))
'------Define the active keys------
exit$ = "sfvcdpbg"
'---------Main Menu starts here------
start:
'----Wait for a keypress----
i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
'---------all the demos use screen 1--------------------
IF INSTR(exit$, i$) THEN
SCREEN , , 1, 0: 'Clear the screen before viewing it to
CLS : ' make the transition cleaner
SCREEN , , 1, 1: 'have basic view and print to screen 1
CALL SetViewPage(1): ' switch windows to screen 1
END IF
SELECT CASE i$
CASE "s": CALL train: CALL machine
CASE "f": CALL Fill
CASE "v": CALL attributes
CASE "c": CALL open10
CASE "d": CALL SimError
CASE "p": CALL PrintxDemo
CASE "b": CALL NewBorders
CASE "q": END
CASE "g": CALL demo2: CALL scrolltext: CALL demo1
CASE "r": CALL ReadScreenDemo
CASE ELSE
END SELECT
'--------------Restore the main menu by switching back to screen 0---------
SCREEN , , 0, 0: CALL SetViewPage(0)
GOTO start
'==========================================================================
100 DATA " Examples",," S Scrollx"," F Fill Window"
DATA " V View Attributes"," C CloseLastW"
DATA " D Call DebugW "," B User defined borders"
DATA " P Printx Demo "
DATA " G Scroll Left in Graphics Mode"
DATA " R ReadScreen Demo"
DATA " Q Quit"
DATA ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
200 DATA ".eiee[] o---o o---o o---o o---o o---o o---o eee[]e "
ResumeNext: EE = ERR: RESUME NEXT
REM $STATIC
'===========================================================================
SUB attributes STATIC
CLS : DEF SEG = &HB900: 'segment of screen 1
LOCATE 10, 30: PRINT "Decimal"; : LOCATE 20, 30: PRINT "Hex";
LOCATE 25, 1: PRINT "Press any key to quit"
'----------------print all the a ttributes in decimal-----------
LOCATE 1, 1, 0
x = 0: DO UNTIL x = 127
PRINT USING "#####"; x;
FOR y = 1 TO 9 STEP 2
POKE x * 10 + y, x
NEXT: i$ = INKEY$: IF i$ <> "" THEN EXIT DO
x = x + 1: LOOP
'-------Print all the attributes in hex-----------------
LOCATE 11, 1
x = 0: DO UNTIL x = 127
i$ = INKEY$: IF i$ <> "" THEN EXIT SUB
PRINT USING "\ \"; HEX$(x);
FOR y = 1 TO 9 STEP 2
POKE x * 10 + y + 1600, x
NEXT: i$ = INKEY$: IF i$ <> "" THEN EXIT DO
x = x + 1: LOOP
Printt CHR$(10), 7, 25, 1: 'erase message
Printt "Press any key to call SwapAttr", 7, 20, 1
CALL SubPause:
Printt "Press any key to call SwapAttr", 7, 21, 1: CALL SwapAttr
CALL SubPause:
Printt "Press any key to call ChangeAttr(15)", &H70, 22, 1: CALL SwapAttr
CALL SubPause:
Printt "Press any key to call ChangeAttr(&h70)", 7, 23, 1
CALL ChangeAttr(15)
CALL SubPause:
Printt "Press any key to call SwapAttr" + CHR$(10), 15, 24, 1
CALL ChangeAttr(&H70)
CALL SubPause:
CALL SwapAttr
Printt "Press any key...", 7, 25, 1
CALL SubPause
END SUB
SUB dec (n) STATIC
n = n - 1
END SUB
SUB demo1 STATIC
SCREEN 2, , 0, 0: CLS
'move a triangle wave
y = 86: z = -1
LINE (0, 23)-(639, 23)
LINE (0, 88)-(639, 88)
i$ = "": DO UNTIL i$ <> ""
FOR x = 632 TO 639
PSET (x, y)
y = y + z
IF y < 32 THEN z = 1 ELSE IF y > 86 THEN z = -1
NEXT x
CALL GScrollL8(24, 0, 87, 639)
i$ = INKEY$: LOOP
RUN
END SUB
SUB demo2 STATIC
SCREEN 0, 1, 0, 0
SCREEN 2: CLS
'rack up some balls
CIRCLE (559, 50), 30:
FOR y = 1 TO 66: CALL GScrollL8(20, 0, 80, 639): NEXT
CIRCLE (559, 50), 30:
FOR y = 1 TO 56: CALL GScrollL8(20, 80, 80, 639): NEXT
CIRCLE (559, 50), 30:
FOR y = 1 TO 46: CALL GScrollL8(20, 160, 80, 639): NEXT
CIRCLE (559, 50), 30:
FOR y = 1 TO 36: CALL GScrollL8(20, 240, 80, 639): NEXT
INPUT "Pause....."; x$
END SUB
REM $DYNAMIC
SUB Fill STATIC
SHARED EE: 'error code from resumenext
'note that larger boxes don't print slower - all the time is taken by basic
'this routine prints tab character, may need to filter the file to expand them
f$ = "WDemo.bas":
LOCATE 2, 21, 0: x$ = CHR$(220) + CHR$(220) + CHR$(220)
x$ = x$ + CHR$(221) + CHR$(32) + CHR$(222)
x$ = x$ + CHR$(223) + CHR$(223) + CHR$(223)
CALL defborder(x$):
BeginFill:
CLS
PRINT "Scroll "; CHR$(25); " "; CHR$(26); " "; CHR$(27); " "; CHR$(24);
PRINT " PageUp PageDown Home End tab shift/tab"
PRINT "Change border b"
PRINT "New file f"
PRINT "Window size + -"
PRINT "Quit <esc>"
PgUp$ = CHR$(0) + CHR$(73): PgDn$ = CHR$(0) + CHR$(81)
Up$ = CHR$(0) + CHR$(72): down$ = CHR$(0) + CHR$(80)
lft$ = CHR$(0) + CHR$(75): rght$ = CHR$(0) + CHR$(77)
Ins$ = CHR$(0) + CHR$(82): del$ = CHR$(0) + CHR$(83): backspace$ = CHR$(0) + CHR$(8)
home$ = CHR$(0) + CHR$(71): end$ = CHR$(0) + CHR$(79): ShiftTab$ = CHR$(0) + CHR$(15)
cr$ = CHR$(13): esc$ = CHR$(27): tab$ = CHR$(9): esc$ = CHR$(27)
r = 5: n = 0: lastline = 1: bb = 2
xx = 2000: REDIM a%(xx): REDIM a$(1000)
'-------------------------Load a text file to view--------------------------
StartFill:
EE = 0: ON ERROR GOTO ResumeNext
'===========================================================================
CLOSE : OPEN "i", #3, f$
LOCATE 10, 30: PRINT "Loading "; f$
IF EE <> 0 THEN
CLOSE
IF f$ <> "" THEN LOCATE 10, 30: PRINT f$; " not found ";
LOCATE 12, 1: PRINT SPC(79); : LOCATE 12, 1, 1
INPUT "Name of a text file to view or <enter> to quit "; f$
IF f$ = "" THEN EXIT SUB ELSE GOTO StartFill
END IF
ON ERROR GOTO 0
PRINT TAB(30); "Press <Esc> to stop"
DO UNTIL EOF(3): LINE INPUT #3, a$(lastline)
LOCATE 9, 40: PRINT USING "####"; lastline
inc lastline
i$ = INKEY$: IF i$ = esc$ THEN EXIT DO
LOOP: CLOSE #3
LOCATE 11, 30: PRINT SPC(79);
'-------------------------Set up a window-----------------------------------
openWindow:
IF r < 1 THEN r = 1 ELSE IF r > 10 THEN r = 10
CALL OpenW(bb, &H7, VARSEG(a%(1)), 11 - r, 36 - 3.5 * r, 14 + r, 45 + 3.5 * r)
'-------------------------Print the file in the window----------------------
printwindow:
IF L > lastline - r * 2 THEN L = lastline - r * 2
IF L < 1 THEN L = 1
IF n < 0 THEN n = 0 ELSE IF n > 120 THEN n = 120
CALL FillW(n, VARPTR(a$(L)))
i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
SELECT CASE i$
CASE "f", "F": f$ = "": GOTO BeginFill
CASE Up$: dec L
CASE down$: inc L
CASE lft$: inc n
CASE rght$: dec n
CASE "b": inc bb: IF bb = 5 THEN bb = 0: CALL CloseLastW: GOTO openWindow ELSE CALL CloseLastW: GOTO openWindow
CASE tab$: n = n + 5
CASE ShiftTab$: n = n - 5
CASE esc$: ERASE a%: ERASE a$: EXIT SUB
CASE PgUp$: L = L - r * 2
CASE PgDn$: L = L + r * 2
CASE home$: n = 0: L = 1
CASE end$: L = 99000
CASE "-": dec r: CALL CloseLastW: GOTO openWindow
CASE "+": inc r: CALL CloseLastW: GOTO openWindow
CASE ELSE
END SELECT: GOTO printwindow
END SUB
REM $STATIC
SUB inc (n) STATIC
n = n + 1
END SUB
REM $DYNAMIC
'===========================================================================
SUB machine STATIC
COLOR 0, 7: CLS
LOCATE 3, 1:
PRINT " "
PRINT " "
PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
PRINT " "
REDIM c%(800)
CALL saveW(VARSEG(c%(1)), 3, 5, 9, 40)
LOCATE 3, 1
PRINT " xxxxxxxxxxxx"
PRINT " xxxxxxxxxxxxxxxxxxxxxx "
PRINT " xxxxxxxxxxxxxxxxxxxxxxxxx "
PRINT " xxxxxxxxxxxxxxxxxxxxxxxx "
PRINT " xxxxxxxxxxxxxxxxxxxxxxx "
PRINT " xxxxxxxxxxxxxxxxxxxx "
PRINT "xxxxxxxxxxxxx "
REDIM ccc%(800)
CALL saveW(VARSEG(ccc%(1)), 3, 5, 9, 40)
CLS
CALL OpenW(0, 0, 0, 10, 50, 23, 54): 'Draw a black box
LOCATE 24, 1, 0
PRINT " A B C D E F G H I J K L M N";
y = 97: DO UNTIL y = 123
i$ = INKEY$: IF i$ <> "" THEN EXIT DO
'----go left and up
FOR pause = 1 TO 10: NEXT
FOR x = 1 TO 7: CALL scrollL(&H70, 1, 1, 44, 23, 60): NEXT
CALL closew(VARSEG(ccc%(1)), 2, 5, 8, 40): 'print arm in up position
FOR x = 1 TO 10: CALL scrollu(&H70, 1, 1, 44, 23, 60): NEXT
'---go right and down
FOR pause = 1 TO 10: NEXT
FOR x = 1 TO 7: CALL scrollr(&H70, 1, 1, 44, 23, 60): NEXT
CALL closew(VARSEG(c%(1)), 2, 5, 8, 40): 'print arm in down position
FOR x = 1 TO 10: CALL scrolld(&H70, 1, 1, 44, 23, 60): NEXT
'scroll the letters
LOCATE 24, 52: PRINT CHR$(y); : ' small letter
IF y < 110 THEN LOCATE 24, 79: PRINT CHR$(y - 19); : 'capital letter
CALL scrollL(&H70, 2, 24, 1, 25, 52)
CALL scrollL(&H70, 2, 24, 53, 25, 79)
'FOR pause = 1 TO 100: NEXT
inc y: LOOP
FOR pause = 1 TO 250: NEXT
COLOR 7, 0
ERASE c%: ERASE ccc%
END SUB
'===========================================================================
SUB NewBorders STATIC
CLS
LOCATE 2, 1, 0: x$ = "123456789":
PRINT x$;
CALL defborder(x$):
CALL OpenW(4, &H3, 0, 4, 2, 8, 8)
LOCATE 2, 21, 0: x$ = CHR$(220) + CHR$(220) + CHR$(220)
x$ = x$ + CHR$(221) + CHR$(32) + CHR$(222)
x$ = x$ + CHR$(223) + CHR$(223) + CHR$(223)
PRINT x$;
CALL defborder(x$):
CALL OpenW(4, &H3, 0, 4, 22, 8, 28)
LOCATE 2, 41, 0: x$ = CHR$(236) + CHR$(240) + CHR$(236)
x$ = x$ + CHR$(177) + CHR$(32) + CHR$(177)
x$ = x$ + CHR$(236) + CHR$(240) + CHR$(236)
PRINT x$;
CALL defborder(x$):
CALL OpenW(4, &H3, 0, 4, 42, 8, 48)
LOCATE 2, 61, 0: x$ = CHR$(176) + CHR$(176) + CHR$(176)
x$ = x$ + CHR$(219) + CHR$(32) + CHR$(219)
x$ = x$ + CHR$(176) + CHR$(176) + CHR$(176)
PRINT x$;
CALL defborder(x$):
CALL OpenW(4, &H3, 0, 4, 62, 8, 68)
INPUT x$
END SUB
'===========================================================================
SUB open10 STATIC
r = 2000
REDIM a%(r): REDIM b%(r): REDIM c%(r): REDIM d%(r): REDIM e%(r)
REDIM f%(r): REDIM g%(r): REDIM h%(r): REDIM i%(r): REDIM j%(r)
pause = 12
CALL OpenW(2, &H70, VARSEG(a%(1)), 11, 36, 15, 44)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(b%(1)), 9, 34, 17, 48)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(c%(1)), 8, 29, 18, 52)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(d%(1)), 7, 25, 19, 56)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(e%(1)), 6, 21, 20, 60)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(f%(1)), 5, 17, 21, 64)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(g%(1)), 4, 13, 22, 68)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(h%(1)), 3, 9, 23, 72)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(i%(1)), 2, 5, 24, 76)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H70, VARSEG(j%(1)), 1, 1, 25, 80)
FOR x = 1 TO 200: NEXT
FOR x = 1 TO 10:
CALL CloseLastW:
FOR xx = 1 TO 20: NEXT
NEXT
'-------------------------------------------------
CALL OpenW(2, &H70, VARSEG(a%(1)), 1, 1, 15, 20)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H2, VARSEG(b%(1)), 2, 4, 16, 24)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H3, VARSEG(c%(1)), 3, 8, 17, 28)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H5, VARSEG(d%(1)), 4, 12, 18, 32)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H6, VARSEG(e%(1)), 5, 16, 19, 36)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, &H7, VARSEG(f%(1)), 6, 20, 20, 40)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, 10, VARSEG(g%(1)), 7, 24, 21, 44)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, 11, VARSEG(h%(1)), 8, 28, 22, 48)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, 14, VARSEG(i%(1)), 9, 32, 23, 52)
FOR x = 1 TO pause: NEXT
CALL OpenW(2, 91, VARSEG(j%(1)), 10, 36, 24, 56)
FOR x = 1 TO 200: NEXT
FOR x = 1 TO 10:
CALL CloseLastW:
FOR xx = 1 TO 20: NEXT
NEXT
ERASE a%: ERASE b%: ERASE c%: ERASE d%: ERASE e%: ERASE f%:
ERASE g%: ERASE h%: ERASE i%: ERASE j%:
END SUB
REM $STATIC
SUB pages STATIC
'tests if printx prints to correct pages
FOR x = 0 TO 3: SCREEN , , x, x: CLS : NEXT
SCREEN , , 1, 1: CALL SetViewPage(1)
CALL OpenW(2, &H77, 0, 5, 5, 20, 40)
CALL PrintW("Hello", 7, 2, 2)
CALL SetViewPage(0): CALL Printt("Page0", 7, 10, 10)
CALL SetViewPage(1): CALL Printt("Page1", 7, 10, 10)
CALL SetViewPage(2): CALL Printt("Page2", 7, 10, 10)
CALL SetViewPage(3): CALL Printt("Page3", 7, 10, 10)
FOR x = 0 TO 3: SCREEN , , x, x: PRINT "Page "; x; : INPUT x$: NEXT
FOR x = 0 TO 3: SCREEN , , x, x: PRINT "Page "; x; : INPUT x$: NEXT
END
END SUB
SUB PrintxDemo STATIC
SHARED e$()
CALL SetViewPage(1): SCREEN , , 1, 1
FOR px = 1 TO 3: 'Once for each type of call
'---------------------------initialize the screen--------------------
CLS :
FOR x = 1 TO 16: LOCATE x, 6: PRINT x; : NEXT
LOCATE 17, 1: FOR x = 1 TO 6: PRINT "1234567890"; : NEXT
Printt "Next string to print is", 7, 18, 1
LOCATE 3, 1
IF px = 1 THEN PRINT "Call to PrintW"
IF px = 2 THEN PRINT "Call to PrintW $ + chr$(13)"
IF px = 3 THEN PRINT "Call to PrintW $ + chr$(10)"
'----------------------initialize the window-------------------------------
attr% = &H70: r% = 5: c% = 11
tr = 4: lc = 10: br = 16: rc = 66
CALL OpenW(2, 7, 0, tr, lc, br, rc)
'CALL temp
'---print R, C, and the next string to be printed and locate the cursor----
FOR x = 1 TO 13
LOCATE 1, 40, 0: PRINT "R% = "; r%; " C% = "; c%
rr% = 19: cc% = 1
Printt e$(x), &H70, rr%, cc%
Printt CHR$(13), &H7, rr%, cc%
Printt CHR$(13), &H7, rr%, cc%
IF r% = 16 THEN LOCATE 22, 1: PRINT "Note the cursor goes out of bounds instead of scrolling the last line"
LOCATE r%, c%, 1, 1, 12: 'block cursor
'if window has no border, use this formula:
'LOCATE r% + tr - 1, c% + lc - 1, 1, 1, 12
'------------------------Pause, then make the call to PrintW---------------
i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
IF px = 1 THEN PrintW e$(x), attr%, r%, c%
IF px = 2 THEN PrintW e$(x) + CHR$(13), attr%, r%, c%
IF px = 3 THEN PrintW e$(x) + CHR$(10), attr%, r%, c%
'IF px = 3 AND x = 8 THEN PrintW e$(x) + CHR$(10), attr%, r%, c%
NEXT
NEXT px
END SUB
SUB scrolltext STATIC
SCREEN 2, 0, 0, 0: CLS
'characters in screen 2 are 8 by 8 so it is easy to scroll one char at a time
'draw a pattern
FOR x = 1 TO 20
PRINT "Hello 1 2 3 4 5 6 7 8 9 0 q w e r t y u i o p z x c v b n m , . / a s h j k l []"
NEXT
'define the window size where row (a&c) is 1 to 25 and columns (b & d)
'are 1 to 80
a = 3: b = 1: c = 6: d = 80
'convert rows & columns to 0-199 and 0-639 format
tr = (a - 1) * 8: lc = (b - 1) * 8: br = c * 8 - 1: rc = (d - 1) * 8
PRINT tr, lc, br, rc: INPUT "Pause....."; x$
'scroll 8 characters left
CALL GScrollL8(tr, lc, br, rc)
CALL GScrollL8(tr, lc, br, rc)
CALL GScrollL8(tr, lc, br, rc)
CALL GScrollL8(tr, lc, br, rc)
CALL GScrollL8(tr, lc, br, rc)
CALL GScrollL8(tr, lc, br, rc)
CALL GScrollL8(tr, lc, br, rc)
CALL GScrollL8(tr, lc, br, rc)
INPUT "Pause....."; x$
END SUB
'===========================================================================
SUB SimError STATIC
CALL DebugW
END SUB
SUB StringArray
SHARED e$()
OPEN "i", #3, "declare.bas"
FOR x = 1 TO 30
LINE INPUT #3, e$(x)
NEXT
END SUB
SUB SubPause
i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
END SUB
REM $DYNAMIC
'===========================================================================
SUB train STATIC
CLS : pause = 4
PRINT " f/faster s/slower esc/quit delay ="
LOCATE 1, 60: PRINT USING "###"; pause;
RESTORE 200: READ x$
FOR x = 1 TO LEN(x$)
LOCATE 10, 80
PRINT MID$(x$, x, 1);
CALL scrollL(&H7, 1, 10, 1, 10, 80)
CALL scrolld(&H7, 1, 1, 5, 16, 5)
CALL scrollr(7, 1, 16, 1, 16, 80)
CALL scrollu(7, 1, 10, 80, 16, 80)
NEXT
DO
CALL scrollL(&H7, 1, 10, 1, 10, 80)
CALL scrolld(&H7, 1, 1, 5, 16, 5)
CALL scrollr(7, 1, 16, 1, 16, 80)
CALL scrollu(&H7, 1, 10, 80, 16, 80)
FOR y = 1 TO pause: NEXT
i$ = INKEY$:
IF i$ = CHR$(27) THEN EXIT DO
IF i$ <> "" THEN GOSUB TrainKeyPress
LOOP
xs = 16: yy = 0
FOR x = 1 TO 250
'IF yy = 46 GOTO ExitTrain
y = SCREEN(16, 79)
'LOCATE 1, 1: PRINT y: INPUT x$
IF y = 46 THEN xs = 15: x = 200: yy = 46
ExitTrain:
CALL scrollL(&H7, 1, 10, 1, 10, 80)
CALL scrolld(&H7, 1, 1, 5, 16, 5)
CALL scrollr(7, 1, 16, 1, 16, 80)
CALL scrollu(&H7, 1, 10, 80, xs, 80)
'LOCATE 20, 1: PRINT y; : PRINT " "; SCREEN(16, 80): INPUT x$
NEXT
EXIT SUB
TrainKeyPress:
IF i$ = "f" AND pause > 0 THEN dec pause
IF i$ = "s" AND pause < 100 THEN inc pause
LOCATE 1, 60: PRINT USING "###"; pause;
RETURN
END SUB